import os
import pickle
import random

def get_btn(device_id):


    # 获取当前脚本的文件路径
    current_file_path = os.path.abspath(__file__)

    # 获取当前脚本所在的文件夹路径
    current_directory = os.path.dirname(current_file_path)

    # 从文件中读取并反序列化对象
    with open(current_directory + '/device_btn_content_dict.pkl', 'rb') as file:
        device_btn_content_dict = pickle.load(file)

    # print(device_btn_content_dict)


    # 查看本地是否有该设备的数据
    btn_content_dict = device_btn_content_dict.get(device_id)

    if btn_content_dict:
        # 继续处理

        # 判断是否取完
        if judge_ifend_btn_content_dict(btn_content_dict):
            reset_btn_content_dict(device_id)

            # 获取当前脚本的文件路径
            current_file_path = os.path.abspath(__file__)

            # 获取当前脚本所在的文件夹路径
            current_directory = os.path.dirname(current_file_path)

            # 从文件中读取并反序列化对象
            with open(current_directory + '/device_btn_content_dict.pkl', 'rb') as file:
                device_btn_content_dict = pickle.load(file)

            btn_content_dict = device_btn_content_dict.get(device_id)

        btn_content = get_btn_by_order(btn_content_dict)

        return_btn_content = btn_content

        # 将已经取出的修改为False
        btn_content_dict[btn_content] = False

        device_btn_content_dict.update({device_id: btn_content_dict})

        with open(current_directory + '/device_btn_content_dict.pkl', 'wb') as file:
            pickle.dump(device_btn_content_dict, file)


        return return_btn_content


    else:
        # 为一个设备创建一个btn_content_dict并存入 device_btn_content_dict
        btn_content_dict = get_upset_btn_content_dict()
        device_btn_content_dict.update({device_id: btn_content_dict})
        # 持久化到本地
        with open(current_directory + '/device_btn_content_dict.pkl', 'wb') as file:
            pickle.dump(device_btn_content_dict, file)

        btn_content = get_btn_by_order(btn_content_dict)

        return_btn_content = btn_content

        # 将已经取出的修改为False
        btn_content_dict[btn_content] = False

        device_btn_content_dict.update({device_id: btn_content_dict})

        with open(current_directory + '/device_btn_content_dict.pkl', 'wb') as file:
            pickle.dump(device_btn_content_dict, file)

        # 继续处理
        return return_btn_content





def judge_ifend_btn_content_dict(btn_content_dict):
    # 判断是否被取完
    ifend = 0

    for key, value in btn_content_dict.items():
        if value == True:
            ifend = 1
            break

    # 判断已经取完
    if ifend == 0:
        return True




def reset_btn_content_dict(device_id):

    print("执行了重新设置")

    # 获取当前脚本的文件路径
    current_file_path = os.path.abspath(__file__)

    # 获取当前脚本所在的文件夹路径
    current_directory = os.path.dirname(current_file_path)

    # 从文件中读取并反序列化对象
    with open(current_directory + '/device_btn_content_dict.pkl', 'rb') as file:
        device_btn_content_dict = pickle.load(file)

    btn_content_dict = device_btn_content_dict.get(device_id)

    # print(f"改变前的{btn_content_dict}")

    for key, value in btn_content_dict.items():
        btn_content_dict[key] = True

        # print(btn_content_dict[key])

    # print(f"改变后的{btn_content_dict}")

    device_btn_content_dict.update({device_id: btn_content_dict})

    # print(f"device_btn_content_dict 改变后的{device_btn_content_dict.get(device_id)}")

    with open(current_directory + '/device_btn_content_dict.pkl', 'wb') as file:
        pickle.dump(device_btn_content_dict, file)



# 按顺序获取
def get_btn_by_order(btn_content_dict):
    # 如果取完了就要重新设置为True
    # 找到全局变量device_btn_content_dict指定device_id的upset_btn_content_dict设置为True
    for key, value in btn_content_dict.items():
        if value == True:
            return key

# 打乱顺序
def upset_btn_content_dict(btn_content_dict):
    # 原始字典
    my_dict = btn_content_dict

    # 将字典的 items 转换为列表
    items = list(my_dict.items())

    # 打乱列表
    random.shuffle(items)

    # 将打乱后的列表重新转换为字典
    shuffled_dict = dict(items)

    return shuffled_dict

def get_btn_content_dict():

    with open("ren_btn.txt", 'r', encoding='utf-8') as file:
        lines = file.readlines()
        lines = [line.strip() for line in lines]  # 移除每行末尾的换行符

    # 从列表中随机取出一个值
    btn_content_list = lines


    # 创建字典并遍历列表，将每个元素作为键，值为 True
    my_dict = {item: True for item in btn_content_list}

    return my_dict

def get_upset_btn_content_dict():

    return upset_btn_content_dict(get_btn_content_dict())


def reset_device_btn_content_dict():
    # 获取当前脚本的文件路径
    current_file_path = os.path.abspath(__file__)

    # 获取当前脚本所在的文件夹路径
    current_directory = os.path.dirname(current_file_path)


    device_btn_content_dict = {}

    # 持久化到本地
    with open(current_directory + '/device_btn_content_dict.pkl', 'wb') as file:
        pickle.dump(device_btn_content_dict, file)






if __name__ == "__main__":

    reset_device_btn_content_dict()

    print(get_btn("xiaomi6"))

    # 获取当前脚本的文件路径
    current_file_path = os.path.abspath(__file__)

    # 获取当前脚本所在的文件夹路径
    current_directory = os.path.dirname(current_file_path)

    # 从文件中读取并反序列化对象
    with open(current_directory + '/device_btn_content_dict.pkl', 'rb') as file:
        device_btn_content_dict = pickle.load(file)

    print(device_btn_content_dict)

    # 查看本地是否有该设备的数据
    btn_content_dict = device_btn_content_dict.get("xiaomi2")

    print(btn_content_dict)




    # print(upset_btn_content_dict(get_btn_content_dict()))
    #
    # print(get_btn_content_dict())
